/**
 * 
 */
package defi1;

import ihm.ChoixDuFichier;

import java.util.HashMap;

import Utils.EtudeStatistique;
import Utils.Fichier;
import chiffrement.IChiffrement;

/**
 * @author Logan
 *
 */
public class Dechiffrement1 implements IChiffrement {
	
	/** Clé = Caractere chiffre // Value = Caractere clair */
	private HashMap<Character, Character> alphabet;
	
	private String messageClair = "";
	private String messageCrypte = "";
	private ChoixDuFichier cf;
	
	public Dechiffrement1() {
		alphabet = new HashMap<Character, Character>();
		
		// on remplit l'alphabet ( clair | crypte  )
		alphabet.put('a', 'U');
		alphabet.put('b', 'W');
		alphabet.put('c', 'O');
		alphabet.put('d', 'M');
		alphabet.put('e', 'C');
		alphabet.put('f', 'E');
		alphabet.put('g', 'J');
		alphabet.put('h', 'P');
		alphabet.put('i', 'F');
		alphabet.put('j', 'G');
		alphabet.put('k', 'K');
		alphabet.put('l', 'D');
		alphabet.put('m', 'R');
		alphabet.put('n', 'I');
		alphabet.put('o', 'T');
		alphabet.put('p', 'N');
		alphabet.put('q', 'V');
		alphabet.put('r', 'L');
		alphabet.put('s', 'S');
		alphabet.put('t', 'B');
		alphabet.put('u', 'A');
		alphabet.put('v', 'Q');
		alphabet.put('w', 'H');
		alphabet.put('x', 'Z');
		alphabet.put('y', 'Y');
		alphabet.put('z', 'X');
		cf = new ChoixDuFichier(this);
	}
	
	public void decoder() {
		for(int i=0; i<messageCrypte.length(); i++) {
			messageClair=messageClair+alphabet.get(messageCrypte.charAt(i));
		}
	}

	/* (non-Javadoc)
	 * @see chiffrement.IChiffrement#lancer()
	 */
	@Override
	public void lancer() {
		Fichier f = new Fichier(cf.getFichier());
		messageCrypte = f.getContenu();
		EtudeStatistique es = new EtudeStatistique(messageCrypte);
		
		System.out.println("Frequence des lettres : \n" + es.getAlphabet().toString() + "\n");
		System.out.println("Frequence des bigrammes : \n" + es.getAlphabetDouble().toString() + "\n");
		
		decoder();
		System.out.println("Le message clair : ");
		System.out.println(messageClair + "\n");
		//Resultat decodage
		Fichier fDecode = new Fichier();
		fDecode.ecrire("decodeDefi1.txt", messageClair);
	}

	/**
	 * Getter pour alphabet.
	 *
	 * @return the alphabet
	 */
	public HashMap<Character, Character> getAlphabet() {
		return alphabet;
	}

	/**
	 * Setter pour alphabet.
	 *
	 * @param alphabet the alphabet to set
	 */
	public void setAlphabet(HashMap<Character, Character> alphabet) {
		this.alphabet = alphabet;
	}

	/**
	 * Getter pour messageClair.
	 *
	 * @return the messageClair
	 */
	public String getMessageClair() {
		return messageClair;
	}

	/**
	 * Setter pour messageClair.
	 *
	 * @param messageClair the messageClair to set
	 */
	public void setMessageClair(String messageClair) {
		this.messageClair = messageClair;
	}

	/**
	 * Getter pour messageCrypte.
	 *
	 * @return the messageCrypte
	 */
	public String getMessageCrypte() {
		return messageCrypte;
	}

	/**
	 * Setter pour messageCrypte.
	 *
	 * @param messageCrypte the messageCrypte to set
	 */
	public void setMessageCrypte(String messageCrypte) {
		this.messageCrypte = messageCrypte;
	}

}
